CC	      := g++
AR        := ar
CFLAGS    := -g -O0 -MMD -Wall -w -ansi -Wno-unused-result
SRCDIR    := .
OBJDIR	  := build
LDFLAGS   := -Wl,--whole-archive -L./lib -lrt -ldl -lsre -rdynamic -Wl,--no-whole-archive

LIBSRE    := libsre.a

INCLUDES  := -I $(SRCDIR)/elf64      			\
             -I $(SRCDIR)/srelib/include    	\
             -I $(SRCDIR)/srelib/version		\
             -I $(SRCDIR)/srelib/stdio          \
             -I $(SRCDIR)/srelib/misc           \
             -I $(SRCDIR)/srelib/inet           \
             -I $(SRCDIR)/srelib/stdlib

VPATH     := $(SRCDIR)/elf64					\
		 	 $(SRCDIR)/srelib/include		    \
			 $(SRCDIR)/srelib/version		    \
			 $(SRCDIR)/srelib/stdio			    \
			 $(SRCDIR)/srelib/string		    \
			 $(SRCDIR)/srelib/misc			    \
			 $(SRCDIR)/srelib/inet			    \
			 $(SRCDIR)/srelib/stdlib		    \

FILES_OBJ  := $(OBJDIR)/elf64.o 			    \

SRE_OBJ    := $(OBJDIR)/sre_printf.o		    \
			  $(OBJDIR)/fgets.o		    		\
			  $(OBJDIR)/sre_version.o		    \
			  $(OBJDIR)/memcpy.o		        \
			  $(OBJDIR)/memmove.o		        \
			  $(OBJDIR)/memcmp.o		        \
			  $(OBJDIR)/memset.o		        \
			  $(OBJDIR)/malloc.o		        \
			  $(OBJDIR)/assert.o		        \
			  $(OBJDIR)/getopt.o		        \
			  $(OBJDIR)/exit.o	        		\
			  $(OBJDIR)/error.o	        		\
			  $(OBJDIR)/addr.o	        		\
			  $(OBJDIR)/socketcalls.o	        \
			  
$(OBJDIR)/%.o: %.c
	@mkdir -p $(@D)
	$(CC) $(INCLUDES) $(CFLAGS) -c $< -o $@ 

.PHONY: all 

all: libs elfload

libs: $(LIBSRE)

$(LIBSRE): $(SRE_OBJ)
	@mkdir -p $(@D)
	$(AR) cqs $(OBJDIR)/$@ $^
	@cp $(OBJDIR)/$@ ./lib

elfload: $(FILES_OBJ)
	@mkdir -p $(@D)
	$(CC) $^ $(LDFLAGS) -o $(OBJDIR)/$@
	@cp $(OBJDIR)/$@ ./bin

clean:
	rm -rf $(OBJDIR) ./bin/* ./lib/libsre.a 
	




	
